package bzapps.weynak;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;

import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;

import android.location.Location;
import android.util.Log;

public class uploadfile {
 
	public static final String URL = "http://www.bz-apps.com/weynak" ;
	public static final String SAVE_PHOTO = "/photos.php?photo=save";
	
    public void doFileUpload(String path){

    	  HttpURLConnection conn = null;
    	  DataOutputStream dos = null;
    	  DataInputStream inStream = null; 

    	 
    	  String exsistingFileName = path ;
    	  String lineEnd = "\r\n";
    	  String twoHyphens = "--";
    	  String boundary =  "*****";


    	  int bytesRead, bytesAvailable, bufferSize;

    	  byte[] buffer;

    	  int maxBufferSize = 1*1024*1024;

    	  String responseFromServer = "";

    	  String urlString = "http://www.bz-apps.com/weynak/upload_pic.php";


    	  try
    	  {
    	   //------------------ CLIENT REQUEST
    	 
    	  FileInputStream fileInputStream = new FileInputStream(new File(exsistingFileName) );

    	   // open a URL connection to the Servlet
    	   URL url = new URL(urlString);

    	   // Open a HTTP connection to the URL
    	   conn = (HttpURLConnection) url.openConnection();

    	   // Allow Inputs
    	   conn.setDoInput(true);

    	   // Allow Outputs
    	   conn.setDoOutput(true);

    	   // Don't use a cached copy.
    	   conn.setUseCaches(false);

    	   // Use a post method.
    	   conn.setRequestMethod("POST");
    	   
    	   conn.setConnectTimeout(20000);
    	   conn.setRequestProperty("Connection", "Keep-Alive");
    	 
    	   conn.setRequestProperty("Content-Type", "multipart/form-data;boundary="+boundary);

    	   dos = new DataOutputStream( conn.getOutputStream() );

    	   dos.writeBytes(twoHyphens + boundary + lineEnd);
    	   dos.writeBytes("Content-Disposition: form-data; name=\"uploadedfile\";filename=\"" + exsistingFileName +"\"" + lineEnd);
    	   dos.writeBytes(lineEnd);

    	   // create a buffer of maximum size
    	   bytesAvailable = fileInputStream.available();
    	   bufferSize = Math.min(bytesAvailable, maxBufferSize);
    	   buffer = new byte[bufferSize];

    	   // read file and write it into form...
    	   bytesRead = fileInputStream.read(buffer, 0, bufferSize);

    	   while (bytesRead > 0)
    	   {
    	    dos.write(buffer, 0, bufferSize);
    	    bytesAvailable = fileInputStream.available();
    	    bufferSize = Math.min(bytesAvailable, maxBufferSize);
    	    bytesRead = fileInputStream.read(buffer, 0, bufferSize);
    	   }

    	   // send multipart form data necesssary after file data...
    	   dos.writeBytes(lineEnd);
    	   dos.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd);
    	   
    	   
    	   // close streams
    	   fileInputStream.close();
    	   dos.flush();
    	   dos.close();
    	   
    	  }
    	  catch (MalformedURLException ex)
    	  {
    	       Log.e("WEYNAK.Send Photo ", "error: " + ex.getMessage(), ex);
    	  }

    	  catch (IOException ioe)
    	  {
    	       Log.e("WEYNAK.Send Photo ", "error: " + ioe.getMessage(), ioe);
    	  }

    	  //------------------ read the SERVER RESPONSE

    	  try {
    	        inStream = new DataInputStream ( conn.getInputStream() );
    	        String str;
    	       
    	        while (( str = inStream.readLine()) != null)
    	        {
    	             Log.e("WEYNAK.Send Photo ","Server Response"+str);
    	        }
    	        inStream.close();

    	  }
    	  catch (IOException ioex){
    	       Log.e("WEYNAK.Send Photo ", "error: " + ioex.getMessage(), ioex);
    	  }
    	  Maps.utils.sendEmptyMessage(Maps.PHOTO_UPLOADED);
    	}
    
    
    public void insertDBPhoto(String snap,String id, Location l){
    	
    	Calendar cal = Calendar.getInstance();
 		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
 		String date =  sdf.format(cal.getTime());
    	ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
    	nameValuePairs.add(new BasicNameValuePair("uid",id));
    	nameValuePairs.add(new BasicNameValuePair("snap",snap));
    	nameValuePairs.add(new BasicNameValuePair("lat",String.valueOf(l.getLatitude())));
    	nameValuePairs.add(new BasicNameValuePair("lon",String.valueOf(l.getLongitude())));
    	nameValuePairs.add(new BasicNameValuePair("action_d",date));
    	try {
		    	HttpClient httpclient = new DefaultHttpClient();
		        HttpPost httppost = new HttpPost(URL + SAVE_PHOTO);
		        httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
		        HttpResponse response = httpclient.execute(httppost);
		        if(response.getStatusLine().getStatusCode()==200)
		        {
		        	Maps.utils.sendEmptyMessage(Maps.PHOTO_SAVED);
		        }
    	} 	
    		catch(Exception e){
	        Log.e("WEYNAK.insertDB.photo", "Error in http connection "+e.toString());
	        
    	}
    		
    }
}
